package com.longtop.framework.sys.menu.service;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import com.longtop.framework.base.BaseService;
import com.longtop.framework.common.CacheUpdate;
import com.longtop.framework.common.Constant;
import com.longtop.framework.common.QueryConditions;
import com.longtop.framework.common.QueryResult;
import com.longtop.framework.security.BaseCheckedException;
import com.longtop.framework.security.SessionObject;
import com.longtop.framework.sys.menu.model.TSysMenu;

/**
 * 系统管理-菜单service
 * 
 * @author SJH
 */
public class MenuService extends BaseService {

	public static final String BEAN_ID = "menuService";

	/**
	 * 提交保存
	 * 
	 * @param changeMap
	 * @return
	 * @throws BaseCheckedException
	 */
	public Integer[] saveMenu(Map changeMap) throws BaseCheckedException {

		// 插入成功的记录数、更新成功的记录数、删除成功的记录数
		int insertCount = 0;
		int updateCount = 0;
		int deleteCount = 0;

		// 删除主键列表、更新bean的列表、新增bean的列表
		List insertBeanList = (ArrayList) changeMap.get(Constant.INSERT_BEAN_LIST);
		List updateBeanList = (ArrayList) changeMap.get(Constant.UPDATE_BEAN_LIST);
		String idList = (String) changeMap.get(Constant.ID_LIST);

		TSysMenu sysMenu;// C
		Iterator iterator;

		// 批量插入记录
		if (insertBeanList.size() > 0) {
			iterator = insertBeanList.iterator();
			while (iterator.hasNext()) {
				sysMenu = (TSysMenu) iterator.next();
				// 校验id是否重复。
				if (isExistMenuId(sysMenu.getMenuId()))
					throw new BaseCheckedException("", "保存失败,菜单id【" + sysMenu.getMenuId() + "】已经存在!");

				super.save(sysMenu);
				insertCount++;
			}
		}

		// 批量更新记录
		if (updateBeanList.size() > 0) {
			iterator = updateBeanList.iterator();
			while (iterator.hasNext()) {
				sysMenu = (TSysMenu) iterator.next();
				super.update(sysMenu);
				updateCount++;
			}
		}

		// 批量删除记录//C
		if (idList.length() > 0) {
			String sql = "delete from TSysMenu where menuId in(" + idList + ")";
			deleteCount = super.batchUpdate(sql);
		}
		
//		// 更新緩存：
//		getHibernateTemplate().flush();
//		CacheUpdate.getCacheUpdate().updateAuthOperMenuMap();
//		
		return new Integer[] { new Integer(insertCount), new Integer(updateCount), new Integer(deleteCount) };
	}

	/**
	 * 验证MenuId 是否存在
	 * 
	 * @param menuId
	 * @return
	 */
	private boolean isExistMenuId(String id) {
		boolean flag = false;
		List list = this.queryAll("from TSysMenu where menuId='" + id + "'");
		if (list.size() > 0)
			flag = true;
		return flag;
	}

	/**
	 * 读取菜单
	 * 
	 * @param queryConditions
	 * @param filter
	 * @return
	 */
	public QueryResult loadMenu(QueryConditions queryConditions, String filter) {
		queryConditions.setOrderBy("sortNo asc");// 排序
		return super.loadByConditions(queryConditions, TSysMenu.class, filter);
	}

	/**
	 * 删除菜单
	 * 
	 * @param id
	 *            要删除的菜单ID
	 * @param sessionObject
	 *            session对象
	 */
	public void deleteMenu(String id, SessionObject sessionObject) {
		// 删除菜单及其对应的功能
		super.delete(TSysMenu.class, id);
	}

	/**
	 * 读取 菜单menu 信息 ,并根据 菜单id 组织成一个 Map， 此方法供 系统启动时候的Listener调用。
	 * 
	 * @return 菜单信息的Map
	 * 
	 * @author 胡砥峰
	 */
	public Map<String, TSysMenu> getMenuMap() {
		Map menuMap = new HashMap();
		List list = this.queryAll("from TSysMenu order by sortNo asc");
		TSysMenu menu;
		Iterator it = list.iterator();
		while (it.hasNext()) {
			menu = (TSysMenu) it.next();
			menuMap.put(menu.getMenuId(), menu);
		}
		return menuMap;
	}

	/**
	 * 读取 菜单menu 信息 ,返回一个list， 此方法供 系统启动时候的Listener调用。
	 * 
	 * @return 菜单信息的list
	 * 
	 * @author 胡砥峰
	 */
	public List<TSysMenu> getMenuList() {
		return this.queryAll("from TSysMenu order by sortNo asc");
	}
}